Here we model an intervention to address malnutrition among ethnic minority groups in Kon Tum, Vietnam. The model follows observations and discussions and some follow up work by partners of the NIFAM (Nutrition Intervention Forecasting and Monitoring) project in 2022 and 2023. The model focuses on the traditional diets of the Ca Dong people of Kon Tum, Vietnam.

The food environments of the Ca Dong people have changed dramatically since they were resettled from ancestral lands for the construction of the Dak Drinh hydropower reservoir in 2013. Food environments have shifted from traditional hunting, wild harvesting, and swidden agriculture, to low-income commodity production, leading to a decline in forests and the loss of traditional food plants and animals. Through transdisciplinary approaches, we engaged eight groups of stakeholders including local party leaders and forest-dependent communities to explore options for supporting diverse and sustainable food environments. We applied participatory exploration of forest food availability and diversity. We model the potential of reforested areas to restore traditional food environment practices.

We assess policy-level land-use planning to understand the transitions from forests to farmlands and their implications for food environments and forest ecology.

Environmental Kuznets Curve and Food Environments

The model follows an environmental Kuznets curve - conversion of diverse forests to monoculture commodity production has resulted in a loss of ecological resources as well as traditional ecological knowledge and customarily governed forest harvests, affecting food choices and livelihoods - the future of these complex forest systems is unclear. The intertwined issues of forests, food environments, poverty, cultural preservation, and sustainable resource protection highlight the complex challenges faced by indigenous communities undergoing resettlement and changes in their food systems.

Together we set out to identify and model possible solutions, including agroforestry interventions in productive zones. Homegarden agroforestry options could be practicable. These gardens could include plants and animal diversity and lead to better nutrition for households and communities. They could also preserve the traditional diets and customs of people who have been displaced or no longer have access to the forest.

Homegarden agroforestry options as an intervention to improve food environments in Kon Tum, Vietnam

Our work aims to contribute to the understanding of these challenges and develop evidence-based solutions that balance economic development with ecological and cultural sustainability. By collaborating with local stakeholders and incorporating local ecological knowledge. We aim to support interventions for sustainable diets, biodiversity conservation, and livelihood security in the changing landscapes of Vietnam’s highlands.

We identified and described forest foods in community meetings, through observations and forest walks. The iNaturalist app was also used locally and taught to local people so that they could add to the list of edible forest species.

A test run of the intervention was meant to be carried out by the Social Policy Ecology research Institute (SPERI) in Kon Tum with smallholder farmers of the Ca Dong ethnic minority group. The next phase of the work would have been to test selected species for nutrition and field sites for the potential of growing in homegardens. However, there was a local uprising of indigenous people nit far from our project location. Several people were shot and killed including local political leaders and local ethnic minority people. We were unable to continue our work and instead report on what we learned in this short communication.

Conceptual model of homegardens and cooking classes as an intervention to improve food environments in Kon Tum, Vietnam

Kon Tum garden and cooking class simulation

We use the mcSimulation function to perform a Monte Carlo simulations to estimate model outputs based on provided parameters and a model function. The Monte Carlo simulation generates a set of estimated model outputs based on random input samples, providing a distribution of potential outcomes.

# Source our model
source("KonTum_Garden_Model.R")
## 
## Attaching package: 'decisionSupport'
## The following objects are masked _by_ '.GlobalEnv':
## 
##     chance_event, discount, vv
# Ensure consistent results with the random number generator
# not for each 'run' of the MC simulation but for 
# consistency each time we call on the simulation 
set.seed(1234) 

garden_simulation_results <- mcSimulation(
  estimate = estimate_read_csv("inputs_kontum_garden.csv"),
  model_function = kontum_garden_function,
  numberOfModelRuns = 1000, #run 1000 times
  functionSyntax = "plainNames"
)

Here we present the value for the interventions as a Net Present Value (NPV). However, to be a realistic alternative, these interventions need to provide equivalent income to cassava planting (roughly 20 million VND per ha/yr). We have added a line to the plot to represent this cut off.

source("functions/plot_distributions.R")
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
plot_distributions(mcSimulation_object = garden_simulation_results, 
                                    vars = c("NPV_garden", "NPV_no_garden"),
                                    method = 'hist_simple_overlay', 
                                    base_size = 7, 
                                    x_axis_name = "Comparative NPV outcomes") + geom_vline(xintercept = 90)

Net Present Value

We plot the distribution for the decision and frame the projected NPV gain for the ‘decision’ (distributions for the two options with the NPV values of the no garden option subtracted from those for the garden).

plot_distributions(mcSimulation_object = garden_simulation_results, 
                                    vars = "decision",
                                    method = 'hist_simple_overlay', 
                                    base_size = 7,  
                                    x_axis_name = "Relative gain compared to no garden") + geom_vline(xintercept = 90)

Summary of results for the decision

Summary

Use gt_plt_summary() from {gtExtras}

library(gtExtras)
## Loading required package: gt
library(svglite)
# Subset the outputs from the mcSimulation function (y) to summarize only on the variables that we want.
mcSimulation_summary <- data.frame(garden_simulation_results$x[2:38], 
                                 garden_simulation_results$y[1:3])

gt_plt_summary(mcSimulation_summary) 
mcSimulation_summary
1000 rows x 40 cols
Column Plot Overview Missing Mean Median SD
discount_rate 3.49.4 0.0% 6.5 6.5 0.9
size_of_garden 28123 0.0% 75.2 75.2 14.9
CV_value 0.010.53 0.0% 0.3 0.3 0.1
inflation_rate 2.912.2 0.0% 7.5 7.5 1.5
if_community_likes 0.020.98 0.0% 0.5 0.5 0.2
if_effective_manage 0.430.82 0.0% 0.6 0.6 0.1
if_garden_yield_enough 0.160.75 0.0% 0.4 0.4 0.1
if_garden_healthy 0.311.00 0.0% 0.7 0.7 0.1
if_effective_training 0.040.98 0.0% 0.5 0.5 0.2
if_offer_green_space 0.290.99 0.0% 0.7 0.7 0.1
if_reduce_polution 0.070.61 0.0% 0.4 0.4 0.1
if_biophysical_good 0.070.66 0.0% 0.4 0.4 0.1
equipment_cost 14130 0.0% 74.9 75.0 15.2
construction_cost 838 0.0% 22.4 22.5 4.6
garden_designing_costs 7.917.4 0.0% 12.5 12.4 1.5
compost_starting 212 0.0% 7.4 7.4 1.5
worm_starting 0.96.2 0.0% 3.5 3.5 0.9
livestock_costs 0.76.9 0.0% 3.5 3.5 0.9
maintaining_labor 1846 0.0% 32.5 32.4 4.7
seed_costs 0.62.4 0.0% 1.5 1.5 0.3
fertilizer 0.52.4 0.0% 1.5 1.5 0.3
plant_protection 0.86.8 0.0% 3.5 3.5 0.9
child_veg_access 313 0.0% 7.5 7.5 1.5
child_healthier_choices 5658 0.0% 290.6 285.5 119.1
women_veg_access 2.612.6 0.0% 7.5 7.5 1.6
women_healthier_choices 4645 0.0% 297.1 298.6 121.3
elderly_veg_access 2.912.6 0.0% 7.5 7.5 1.5
elderly_healthier_choices 10739 0.0% 299.2 292.0 119.3
others_veg_access 2.512.1 0.0% 7.5 7.5 1.6
others_healthier_choices 6771 0.0% 303.3 301.0 119.7
green_space_value 55234 0.0% 149.9 149.1 30.8
reduce_polution_value 726 0.0% 15.2 15.2 3.0
school_event_value 071 0.0% 29.6 29.5 12.5
if_not_fallow 0.070.62 0.0% 0.4 0.4 0.1
value_of_non_garden_land_use 76595 0.0% 353.4 358.2 89.5
costs_of_non_garden_land_use 0.07.3 0.0% 3.0 3.0 1.2
value_of_fallow_non_garden_land 861 0.0% 34.5 34.2 8.8
NPV_garden 9425K 0.0% 2,744.8 2,695.8 777.5
NPV_no_garden 283K 0.0% 751.9 197.1 826.5
decision -1.1K5.0K 0.0% 1,992.9 2,098.4 1,104.6

Summary of the savings

summary(garden_simulation_results$y$decision)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   -1145    1303    2098    1993    2733    5043

Summary of costs

summary(garden_simulation_results$y$total_costs)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   232.2   322.1   343.5   343.8   366.5   447.1

Summary of the first year of investment

summary(garden_simulation_results$y$Cashflow_garden1)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   65.86  338.74  436.00  444.09  539.97  908.71

Cashflow of the garden option

source("functions/plot_cashflow.R")
plot_cashflow(mcSimulation_object = garden_simulation_results, 
              cashflow_var_name = "Cashflow_garden")

EVPI

# Subset the outputs from the mcSimulation function (y) by selecting the correct variables be sure to run the multi_EVPI only on the variables that the we want.
mcSimulation_table <- data.frame(garden_simulation_results$x, 
                                 garden_simulation_results$y[1:3])
source("functions/multi_EVPI.R")
evpi <- multi_EVPI(mc = mcSimulation_table, first_out_var = "NPV_garden")
## [1] "Processing 3 output variables. This can take some time."
## [1] "Output variable 1 (NPV_garden) completed."
## [1] "Output variable 2 (NPV_no_garden) completed."
## [1] "Output variable 3 (decision) completed."
source("functions/plot_evpi.R")
plot_evpi(evpi, decision_vars = "decision")
## Warning: There are no variables with a positive EVPI. You probably do not need
## a plot for that.

Projection to Latent Structure

Here we run a Projection to Latent Structures (PLS) model, a flexible type of regression model. The results of this model can give us some sense of the correlation strength and direction for model variables and our outcome variables.

source("functions/pls_model.R")
pls_result <- pls_model(object = garden_simulation_results,
                                resultName = names(garden_simulation_results$y)[1], 
                                ncomp = 1)

input_table <- read.csv("inputs_kontum_garden.csv")
source("functions/plot_pls.R")
plot_pls(pls_result, input_table = input_table, threshold = 0)

The full repository can be accessed with the following QR code.